Repository navigation
Conversation
Messages sent from another thread already record senderThreadId, and the web and mobile timelines use it, but t3_thread_read items left it out, so the receiving agent could not tell which thread sent a message. Timeline items now carry an optional senderThreadId, included only when the message has one.
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a narrowly scoped MCP bug fix that exposes an already-stored sender thread ID through an optional, backward-compatible response field. The accompanying test covers both sender-attributed and ordinary messages without changing defaults or processing behavior. Notes:
You can add or adjust custom eligibility rules. Learn more. |
Dismissing prior approval to re-evaluate 4f43047
The new readThread sender test now provides ServerSettings.layerTest(), which OrchestratorMcpService requires since main added the server settings dependency.
Dismissing prior approval to re-evaluate d73854e
|
+1, this would be useful to us. We run several threads that message each other with I haven't run this branch. This comes from reading the PR description and from our use case. Note Responses generated with Claude |
|
Note 🤖 Claude Fable 5.1 on behalf of Mnigos Closing to keep my open queue focused; happy to reopen if this is still wanted. |
|
Eh I commented just 3 days ago I would like this. |
|
Could this be reopened? We hit the same gap today on Setup. One thread acts as the coordinator. It collects requirements, launches new threads with Repro.
Why it matters. That convention is just text, so anyone can forge it. Any agent that can call What would close it.
Happy to test a build. |
|
Note 🤖 Claude Fable 5.1 on behalf of Mnigos Reopened, thanks for the repro. The forgeable |
Dismissing prior approval to re-evaluate 6887a6e
Addresses the
t3_thread_readpart of #17517; the server-authored line in the delivered turn is left out (see below).Problem
When one thread sends a message to another with
t3_thread_send, the server records the sender on the message assenderThreadId, and the web and mobile timelines use it.t3_thread_readleft the field out of its timeline items, so the agent that received the message could not tell which thread sent it. It only sawcreatedBy: "agent"andcreationSource: "mcp". @pawelwitek34's reproduction shows this clearly. A parent with two delegated children could only work out the sender by reading each child's timeline and matchingmessageIds.Change
OrchestratorMcpThreadTimelineItem(packages/contracts/src/orchestratorMcp.ts) gets an optionalsenderThreadId.timelineIteminapps/server/src/mcp/OrchestratorMcpService.tscopies it from the stored message. The field appears only when the message has a sender, so items without one add no response bytes; the advertised output schema gains the optional field.The issue also suggests adding a server-written line to the delivered turn so the agent would not need a second call. That is out of scope here. It changes the prompt text that every provider receives and needs its own design for how the line is worded and placed. The field on
t3_thread_readgives agents a reliable sender id now.Verification
OrchestratorMcpService.activity.test.tson basesenderThreadIdisundefined)senderThreadIdand the user message has no such fieldvp test run src/mcp(apps/server)vp run typecheck(apps/server, packages/contracts)Server/contract change with no UI, so no screenshots.
Not checked: a live
delegate_task+t3_thread_sendround trip against real providers.Implemented with Claude Opus 5.5, verified with GPT-6 Astra, coordinated by Claude Fable 5.1 in Claude Code.